package br.unicamp.ic.inf300.arena.persistencia.dao.impl;

import br.unicamp.ic.inf300.arena.modelo.artistico.Espetaculo;
import br.unicamp.ic.inf300.arena.modelo.artistico.Filme;
import br.unicamp.ic.inf300.arena.modelo.artistico.PecaTeatral;
import br.unicamp.ic.inf300.arena.persistencia.dao.IEspetaculoDAO;
import br.unicamp.ic.inf300.framework.persistencia.SQLUtil;

public class EspetaculoDAOHsql implements IEspetaculoDAO {

	/**
	 * 
	 */
	public Espetaculo obterEspetaculo(int codigo, int tipo) throws Exception {
		Espetaculo espetaculo = null;

		Object[] params = new Object[1];
		params[0] = codigo;

		StringBuffer stbQuery = new StringBuffer();
		stbQuery.append(" SELECT * FROM ");
		stbQuery.append(/*SQLUtil.getDbSchema() + "." +*/ IEspetaculoDAO.TABELA_BD);
		stbQuery.append(" WHERE " + IEspetaculoDAO.COLUMN_CODIGO_PK + " = ?");

		if (tipo == Espetaculo.TIPO_ESPETACULO_FILME) {
			espetaculo = new Filme();
			espetaculo = (Espetaculo) SQLUtil.retrieveBean(stbQuery.toString(),
					Filme.class, params);

		} else if (tipo == Espetaculo.TIPO_ESPETACULO_PECA) {
			espetaculo = new PecaTeatral();
			espetaculo = (Espetaculo) SQLUtil.retrieveBean(stbQuery.toString(),
					PecaTeatral.class, params);
		}
		return espetaculo;
	}

	/**
	 *
	 */
	public boolean inserir(Filme filme) throws Exception {
		int result = 0;
		if (filme != null) {
		    Object[] params = new Object[8];
		    params[0] = Espetaculo.TIPO_ESPETACULO_FILME;
		    params[1] = filme.getTitulo();
		    params[2] = filme.getGenero();
		    params[3] = filme.getSinopse();
		    params[4] = filme.getCensura();
		    params[5] = filme.getElenco();
		    params[6] = filme.getDuracao();
		    params[7] = filme.getProdutora();

		    StringBuffer stbQuery = new StringBuffer();
		    stbQuery.append(" INSERT INTO ");
		    stbQuery.append(/*SQLUtil.getDbSchema() + "."
			    +*/ IEspetaculoDAO.TABELA_BD + " (");
		    //
		    stbQuery.append(IEspetaculoDAO.COLUMN_TIPO		 + ", ");
		    stbQuery.append(IEspetaculoDAO.COLUMN_TITULO	 + ", ");
			stbQuery.append(IEspetaculoDAO.COLUMN_GENERO 	 + ", ");
			stbQuery.append(IEspetaculoDAO.COLUMN_SINOPSE 	 + ", ");
			stbQuery.append(IEspetaculoDAO.COLUMN_CENSURA 	 + ", ");
			stbQuery.append(IEspetaculoDAO.COLUMN_ELENCO 	 + ", ");
			stbQuery.append(IEspetaculoDAO.COLUMN_DURACAO 	 + ", ");
			stbQuery.append(IEspetaculoDAO.COLUMN_PRODUTORA  + ") ");
		    stbQuery.append(" VALUES (?, ?, ?, ?, ?, ?, ?, ?) ");
		    //
		    result = SQLUtil.update(stbQuery.toString(), params);
		}
		return (result > 0 ? true : false);
	}

	/**
	 *
	 */
	public boolean inserir(PecaTeatral teatro) throws Exception {
		int result = 0;
		if (teatro != null) {
		    Object[] params = new Object[9];
		    params[0] = Espetaculo.TIPO_ESPETACULO_FILME;
		    params[1] = teatro.getTitulo();
		    params[2] = teatro.getGenero();
		    params[3] = teatro.getSinopse();
		    params[4] = teatro.getCensura();
		    params[5] = teatro.getElenco();
		    params[6] = teatro.getDuracao();
		    params[7] = teatro.getCompaniaTeatro();
		    params[8] = teatro.getPatrocinadores();

		    StringBuffer stbQuery = new StringBuffer();
		    stbQuery.append(" INSERT INTO ");
		    stbQuery.append(/*SQLUtil.getDbSchema() + "."
			    +*/ IEspetaculoDAO.TABELA_BD + " (");
		    //
		    stbQuery.append(IEspetaculoDAO.COLUMN_TIPO		 + ", ");
		    stbQuery.append(IEspetaculoDAO.COLUMN_TITULO	 + ", ");
			stbQuery.append(IEspetaculoDAO.COLUMN_GENERO 	 + ", ");
			stbQuery.append(IEspetaculoDAO.COLUMN_SINOPSE 	 + ", ");
			stbQuery.append(IEspetaculoDAO.COLUMN_CENSURA 	 + ", ");
			stbQuery.append(IEspetaculoDAO.COLUMN_ELENCO 	 + ", ");
			stbQuery.append(IEspetaculoDAO.COLUMN_DURACAO 	 + ", ");
			stbQuery.append(IEspetaculoDAO.COLUMN_COMPANIA_TEATRO 	 + ", ");
			stbQuery.append(IEspetaculoDAO.COLUMN_PATROCINADORES     + ") ");
		    stbQuery.append(" VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) ");
		    //
		    result = SQLUtil.update(stbQuery.toString(), params);
		}
		return (result > 0 ? true : false);
	}
}